{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "NlpAssignment1.ipynb",
      "provenance": []
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "accelerator": "GPU"
  },
  "cells": [
    {
      "cell_type": "code",
      "metadata": {
        "id": "z8xhC75lvdpU",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "import pandas as pd\n",
        "import numpy as np\n",
        "import matplotlib.pyplot as plt\n",
        "from sklearn.model_selection import train_test_split"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "VpDsTf2Ivkc7",
        "colab_type": "code",
        "outputId": "d8a6909d-2984-4f9a-b353-0fde395510fc",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 125
        }
      },
      "source": [
        "from google.colab import drive\n",
        "drive.mount('/content/drive')"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Go to this URL in a browser: https://accounts.google.com/o/oauth2/auth?client_id=947318989803-6bn6qk8qdgf4n4g3pfee6491hc0brc4i.apps.googleusercontent.com&redirect_uri=urn%3aietf%3awg%3aoauth%3a2.0%3aoob&response_type=code&scope=email%20https%3a%2f%2fwww.googleapis.com%2fauth%2fdocs.test%20https%3a%2f%2fwww.googleapis.com%2fauth%2fdrive%20https%3a%2f%2fwww.googleapis.com%2fauth%2fdrive.photos.readonly%20https%3a%2f%2fwww.googleapis.com%2fauth%2fpeopleapi.readonly\n",
            "\n",
            "Enter your authorization code:\n",
            "··········\n",
            "Mounted at /content/drive\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "dCM5eQclxJK7",
        "colab_type": "code",
        "outputId": "a7fd771b-4138-4665-b644-2bff3bc56672",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 34
        }
      },
      "source": [
        "%cd drive/My\\ Drive/Colab\\ Notebooks"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "/content/drive/My Drive/Colab Notebooks\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "WrPr0Ks0vuJm",
        "colab_type": "code",
        "outputId": "73df7da6-4f6d-4fa8-acf9-04fe8ba36b64",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 367
        }
      },
      "source": [
        "dataset = pd.read_csv('housing.csv')\n",
        "dataset = dataset.dropna()\n",
        "del dataset['ocean_proximity']\n",
        "dataset.head(10)"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>longitude</th>\n",
              "      <th>latitude</th>\n",
              "      <th>housing_median_age</th>\n",
              "      <th>total_rooms</th>\n",
              "      <th>total_bedrooms</th>\n",
              "      <th>population</th>\n",
              "      <th>households</th>\n",
              "      <th>median_income</th>\n",
              "      <th>median_house_value</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>-122.23</td>\n",
              "      <td>37.88</td>\n",
              "      <td>41.0</td>\n",
              "      <td>880.0</td>\n",
              "      <td>129.0</td>\n",
              "      <td>322.0</td>\n",
              "      <td>126.0</td>\n",
              "      <td>8.3252</td>\n",
              "      <td>452600.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>-122.22</td>\n",
              "      <td>37.86</td>\n",
              "      <td>21.0</td>\n",
              "      <td>7099.0</td>\n",
              "      <td>1106.0</td>\n",
              "      <td>2401.0</td>\n",
              "      <td>1138.0</td>\n",
              "      <td>8.3014</td>\n",
              "      <td>358500.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>-122.24</td>\n",
              "      <td>37.85</td>\n",
              "      <td>52.0</td>\n",
              "      <td>1467.0</td>\n",
              "      <td>190.0</td>\n",
              "      <td>496.0</td>\n",
              "      <td>177.0</td>\n",
              "      <td>7.2574</td>\n",
              "      <td>352100.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>-122.25</td>\n",
              "      <td>37.85</td>\n",
              "      <td>52.0</td>\n",
              "      <td>1274.0</td>\n",
              "      <td>235.0</td>\n",
              "      <td>558.0</td>\n",
              "      <td>219.0</td>\n",
              "      <td>5.6431</td>\n",
              "      <td>341300.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>-122.25</td>\n",
              "      <td>37.85</td>\n",
              "      <td>52.0</td>\n",
              "      <td>1627.0</td>\n",
              "      <td>280.0</td>\n",
              "      <td>565.0</td>\n",
              "      <td>259.0</td>\n",
              "      <td>3.8462</td>\n",
              "      <td>342200.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>5</th>\n",
              "      <td>-122.25</td>\n",
              "      <td>37.85</td>\n",
              "      <td>52.0</td>\n",
              "      <td>919.0</td>\n",
              "      <td>213.0</td>\n",
              "      <td>413.0</td>\n",
              "      <td>193.0</td>\n",
              "      <td>4.0368</td>\n",
              "      <td>269700.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>6</th>\n",
              "      <td>-122.25</td>\n",
              "      <td>37.84</td>\n",
              "      <td>52.0</td>\n",
              "      <td>2535.0</td>\n",
              "      <td>489.0</td>\n",
              "      <td>1094.0</td>\n",
              "      <td>514.0</td>\n",
              "      <td>3.6591</td>\n",
              "      <td>299200.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>7</th>\n",
              "      <td>-122.25</td>\n",
              "      <td>37.84</td>\n",
              "      <td>52.0</td>\n",
              "      <td>3104.0</td>\n",
              "      <td>687.0</td>\n",
              "      <td>1157.0</td>\n",
              "      <td>647.0</td>\n",
              "      <td>3.1200</td>\n",
              "      <td>241400.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>8</th>\n",
              "      <td>-122.26</td>\n",
              "      <td>37.84</td>\n",
              "      <td>42.0</td>\n",
              "      <td>2555.0</td>\n",
              "      <td>665.0</td>\n",
              "      <td>1206.0</td>\n",
              "      <td>595.0</td>\n",
              "      <td>2.0804</td>\n",
              "      <td>226700.0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>9</th>\n",
              "      <td>-122.25</td>\n",
              "      <td>37.84</td>\n",
              "      <td>52.0</td>\n",
              "      <td>3549.0</td>\n",
              "      <td>707.0</td>\n",
              "      <td>1551.0</td>\n",
              "      <td>714.0</td>\n",
              "      <td>3.6912</td>\n",
              "      <td>261100.0</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "   longitude  latitude  ...  median_income  median_house_value\n",
              "0    -122.23     37.88  ...         8.3252            452600.0\n",
              "1    -122.22     37.86  ...         8.3014            358500.0\n",
              "2    -122.24     37.85  ...         7.2574            352100.0\n",
              "3    -122.25     37.85  ...         5.6431            341300.0\n",
              "4    -122.25     37.85  ...         3.8462            342200.0\n",
              "5    -122.25     37.85  ...         4.0368            269700.0\n",
              "6    -122.25     37.84  ...         3.6591            299200.0\n",
              "7    -122.25     37.84  ...         3.1200            241400.0\n",
              "8    -122.26     37.84  ...         2.0804            226700.0\n",
              "9    -122.25     37.84  ...         3.6912            261100.0\n",
              "\n",
              "[10 rows x 9 columns]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 4
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Q9b_DtE9xxF5",
        "colab_type": "code",
        "outputId": "eed9e73a-25ea-4add-b579-d1a166e02e43",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 561
        }
      },
      "source": [
        "dataset.plot(subplots = True, figsize=(10,10))\n",
        "plt.xlim(0,18)"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(0, 18)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 5
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\nDGlERERERYghjYiIiA6aBQsWuDedP+ecc7Bv374R2/ZDDz2EJ598csS2V2i8cICIiIgK4sUXXxzR\n7V1zzTUjur1CY0saERER9aulpQXHH388li5dimOPPRaXXnopXn31VZx66qmYPHky3nrrLfT09OCK\nK67AnDlzMGvWLPzxj38EAESjUfzLv/wLpkyZggsuuADRaNTdbkNDA/bu3QsAOP/883HSSSfhhBNO\nwCOPPOIuU15ejltuuQUzZszA3Llz8emnn+at5x133IF7770XgN1i973vfQ9z5szBscceiz//+c8A\nANM08Z3vfAfTpk1DU1MT7r//fgDAqlWrMGvWLEyfPh1XXHEF4vG4W8ebb74ZM2fORHNzM9555x2c\nffbZOOaYY/DQQw+5z/3Tn/4Us2fPRlNTE26//faReNmLoyVNCLEMwLkA9kgppzll1QCeAdAAoAXA\nxVLKzkLVkYiIqNBeeukl7N69e0S3edhhh+Hzn//8gMtt27YNzz77LJYtW4bZs2dj+fLlWLt2LVas\nWIEf//jHmDp1KhYuXIhly5Zh3759mDNnDj772c/i4YcfRigUwubNm7Fx40aceOKJObe/bNkyVFdX\nIxqNYvbs2fjiF7+Impoa9PT0YO7cubjrrrtw44034tFHH8Wtt946qH0zDANvvfUWXnzxRdx55514\n9dVX8cgjj6ClpQUbNmyApmno6OhALBbD0qVLsWrVKhx77LG47LLL8OCDD+Kb3/wmAGDixInYsGED\nvvWtb2Hp0qV47bXXEIvFMG3aNFxzzTVYuXIltm7dirfeegtSSpx33nlYs2YN5s+fP/j/iByKpSXt\ncQCLsspuArBKSjkZwCpnmoiIiAqgsbER06dPh6IoOOGEE3DmmWdCCIHp06ejpaUFK1euxN13342Z\nM2diwYIFiMVi2L59O9asWYOvfOUrAICmpiY0NTXl3P59993ntpbt2LEDW7duBQD4fD6ce+65AICT\nTjoJLS0tg67zF77whT7rvfrqq7j66quhaXY7VXV1NbZs2YLGxkYce+yxAIAlS5ZgzZo17nbOO+88\nAMD06dNx8sknIxwOo66uDn6/H/v27cPKlSuxcuVKzJo1CyeeeCI++OADt/7DURQtaVLKNUKIhqzi\nxQAWOONPAFgN4HsHrVJERERFZjAtXqPF7/e744qiuNOKosAwDKiqiueffx7HHXfckLe9evVqvPrq\nq3jjjTcQCoXckAcAuq67t69QVRWGYQy5zkNdL992vPudmjYMA1JK3Hzzzbj66qsP+DlyKZaWtFwm\nSCl3OeO7AUwoZGWIiIgov7PPPhv3338/pJQAgL/+9a8AgPnz52P58uUAgE2bNmHjxo191t2/fz+q\nqqoQCoXwwQcf4M033xy1en7uc5/Dww8/7Ia2jo4OHHfccWhpacG2bdsAAE899RTOOOOMQW/z7LPP\nxrJly9Dd3Q0A2LlzJ/bs2TPsuhZzSHNJ+39c5psvhLhKCLFOCLGura3tINaMiIiIAOC2225DMplE\nU1MTTjjhBNx2220AgK997Wvo7u7GlClT8P3vfx8nnXRSn3UXLVoEwzAwZcoU3HTTTZg7d+6o1fPf\n/u3fMHHiRDQ1NWHGjBlYvnw5AoEAHnvsMVx00UVul+5QrhQ966yz8OUvfxnz5s3D9OnTceGFFyIS\niQy7riKVeAvN6e78k+fCgS0AFkgpdwkhDgewWko5YBtqc3OzTN1/hYiI6FC3efNmTJkypdDVoBGQ\n6/9SCLFeStmca/libklbAWCJM74EwB8LWBciIiKig6ooLhwQQvwG9kUCtUKIVgC3A7gbwO+EEF8F\n8AmAiwezrWQyiU8//bTPb2R5p/OND3deIBCAz+cbTDWJiIjoAN1111149tlnM8ouuugi3HLLLQWq\n0egomu7OkXLEEUfIq666qmDP7/P5EA6HUV5e3u8wEAjwB3OJiGhA7O4cO4ba3VkULWkjqaqqChdd\ndBEAwBtAs8PogcwbaLloNIru7m5EIhF0d3dj586d6O7uRjKZ7FNPVVXd0NZfoCsrK4OiFHOvNBER\njTYpJQ/sD3EH0ig25kJaMBjECSecUOhqZIjH425wyzVsb29HS0uLe08YLyEEysrKBtU6p6pqAfaO\niIhGUyAQQHt7O2pqahjUDlFSSrS3tyMQCAxpvTEX0oqR3++H3+9HbW1tv8slk0l0d3fnDXORSAS7\ndu1CT09Pn0SuKAqqq6tRU1OD2tpa1NTUuI+ysjL+YRMRHaLq6+vR2toK3mLq0BYIBFBfXz+kdRjS\nioiu66iqqkJVVVW/y5mmid7e3owA19nZib1796K9vR3btm2DaZru8oFAwA1s2QFO1/XR3i0iIhoG\nXdfR2NhY6GpQATCkHYJS57OFw+Gc8y3Lwr59+9De3o729nY3vLW0tPS50/O4ceNyhrdx48bxXDgi\nIqICYkgbg1Jdn9XV1Zg8eXLGvEQi4YY3b4DbsGEDEomEu5ymaTm7T2traxEMBg/2LhEREZUchrQS\n4/P5cPjhh+Pwww/PKJdSoru7u09427NnD7Zs2QLLstxlQ6FQRnirra3F+PHjUVlZydY3IiKiEcKQ\nRgDsq0hTXagNDQ0Z80zTRGdnZ58At3XrVvcHdAG79a2urg51dXUYP368O2TXKRER0dAxpNGAVFVF\nbW1tzqtTY7EY2tra0NbWhj179qCtrQ0ff/xxxrlvuq73CW91dXUMb0RERP1gSKNhCQQCOOqoo3DU\nUUdllEej0T7h7aOPPsK7777rLuPz+dyuUm+AGzduHG8ZQkREJY8hjUZFMBjExIkTMXHixIzyaDTq\nhrbUcOvWrdiwYYO7jM/n69NlWldXh4qKCoY3IiIqGQxpdFAFg0FMmjQJkyZNyijv7e3tE962bNmS\ncc6b3+/vE958Ph8sy3IfpmnmnT7QefmWVRQFuq5D07RhDb3jqqoyiBIREQCGNCoSoVAIDQ0NfS5a\n6Onp6RPeNm/ejHfeeWfEnltRlIyHqqp5p73jhmEgGo3CMAwkk8mMofdq2KEabLDz+/3w+Xx5h9ll\nmsY/98GwLAuRSMS9QCb1kFJC13X3tfU+BlOu6zoDOBENCT+1qaiVlZWhsbEx427bUkr09PSgra0N\nhmEMGKYGmh6NL07TNN3Qlh3ghjPs7e1FMplEIpFAIpFAPB4fdCBUFGXAIDeYsBcKheDz+Ub8NTvY\notFoznsGtre3wzAMdzld11FTUwNN0xCJRNzXPpFIZCw3GP2Fuv6CnqIokFK6DwAZ06NRlioXQvT7\n9zUa46P1d0l0qGFIo0OOEALl5eUoLy8vdFXyUlUVqqrC7/eP+nMZhoF4PJ4R3PobZpdFIpGM6ezf\nhc3F5/MhHA6jvLw877C8vBzBYLCgX7aGYbi3j8luGevp6XGXE0KgqqoKNTU1aGxszLgPYDgczrsP\nlmVlhObUI1dZvvJYLDbs8DeShBDuA7DD23Bahg+Uoig5TwnwPgZbNtCyvMq8sFKfYakDSf5/pDGk\nER3iNE2DpmkoKysb9raklDAMo9+Q19PT4/5mbHd3N3bu3Inu7m4kk8k+21NVNW+A85aVlZUd8Aez\nlBKRSCRnEOvs7MwInWVlZaipqcGxxx6b8UsaVVVVB9QdnPpSGekwbllWRqizLCsjPKUCVHZZvvKh\nlOWSalnLdx5nanyg+UMdz9UanUwmEYvF3Pec9+H9zeKhUFW1T3ALBAIIBoODevj9/pJt+ZNSugcb\nqUc8Hu93Orss+6DE7/cjEAggEAhkjHsf/ZWPpVM7xGCOmg8lzc3Nct26dYWuBlFJSX1Qp4JbvmF3\ndzei0Wif9YUQKCsryxngvEEuXxelNyBqmpbz92hramr4k2ZjXHawyw53QymLx+Po7e1FNBpFNBrN\neRCSIoRwA1soFBpSuBvtVqNUS2h2kM439AaugcJVanqgHKGq6oAhy+/3w7KsPs+X6zkHomnakEJd\nIBCApmlu135q6B0faDicLnohxHopZXPOfTmgLRIReQgh3BalXDc99jIMY8Agt3v3bvT09OT98BdC\noLKyEjU1NZg0aVKf7kl2l5QmRVHcc/lGWupCocE8IpEI9uzZg2g0ing8nnebQoicLXaKogw6VA00\nHImu6uyAU1FRgfHjx/cbuLzjuq4Puw4p3iA5mBAZi8XQ29uLzs5Od/pAW1wHYzBBLnvYH4Y0Ijqo\nNE1DZWUlKisr+13Osqw+XavBYNDtnhzJD36igWia5v503lCYpukGhYHCXW9vL9rb22FZlnshRfZQ\n07Sc5SM19Pl8GYHL5/MV1UGPoihu3Q5UqsvcG+oMw3BbHVND7/hAw+Es2x92dxIREREVSH/dncUT\nj/MQQiwSQmwRQmwTQtxU6PoQERERHQxFHdKEECqABwB8HsBUAF8SQkwtbK2IiIiIRl9RhzQAcwBs\nk1L+XUqZAPBbAIsLXCciIiKiUVfsIe1IADs8061OGREREdGYNiau7hRCXAXgKmcyLoTYVMj6FEgt\ngL2FrkQBcL9LC/e7tHC/S0up7vdx+WYUe0jbCeAoz3S9U5ZBSvkIgEcAQAixLt9VEmMZ97u0cL9L\nC/e7tHC/S4sQIu8tKYq9u/NtAJOFEI1CCB+AfwGwosB1IiIiIhp1Rd2SJqU0hBDXAXgZgApgmZTy\n/QJXi4iIiGjUFXVIAwAp5YsAXhzCKo+MVl2KHPe7tHC/Swv3u7Rwv0tL3v0ec784QERERDQWFPs5\naUREREQliSGNiIiIqAgNKqQJIVqEEO8JITakLhUVQlQLIV4RQmx1hlVOuRBC3Of81uZGIcSJnu0s\ncZbfKoRY4ik/ydn+Nmdd0d9zEBEREY11Q2lJ+ycp5UzPPUxuArBKSjkZwCpnGrB/Z3Oy87gKwIOA\nHbgA3A7gZNg/93S7J3Q9COBKz3qLBngOIiIiojFtOFd3LgawwBl/AsBqAN9zyp+U9hUJbwohKoUQ\nhzvLviKl7AAAIcQrABYJIVYDqJBSvumUPwngfAAv9fMcedXW1sqGhoZh7BYRERHRwbF+/fq9Usq6\nXPMGG9IkgJVCCAngYecO/xOklLuc+bsBTHDG8/3eZn/lrTnK0c9z5NXQ0IB16/LevJeIiIioaAgh\nPsk3b7Ah7TQp5U4hxHgArwghPvDOlFJKJ8CNmv6ew/vbnRMnThzNahAREREdFIM6J01KudMZ7gHw\nAuxzyj51ujHhDPc4i+f7vc3+yutzlKOf58iu3yNSymYpZXNdXc4WQyIiIqJDyoAhTQhRJoQIp8YB\nnAVgE+zf0ExdobkEwB+d8RUALnOu8pwLYL/TZfkygLOEEFXOBQNnAXjZmdclhJjrXNV5Wda2cj0H\nERER0Zg2mO7OCQBecO6KoQFYLqX8byHE2wB+J4T4KoBPAFzsLP8igHMAbAPQC+ByAJBSdgghfgj7\nR9MB4AepiwgAXAvgcQBB2BcMvOSU353nOfLq6dmKD7f+CNVVp6Cycg40rXwQu0hERDQ0yWQSra2t\niMViha4KHQICgQDq6+uh6/qg1xlzPws1dWqNfOA/JsCy4hBCQ0VFE6qqTkF11akYN24mFMVX6CoS\nEdEY8PHHHyMcDqOmpgZOQwZRTlJKtLe3IxKJoLGxMWOeEGK95/ZmGYr+B9aHKhRqxPzTX8P+/evR\n2fk6OjpfR0vLf6Cl5VdQlCAqK5tRXXUKqqtPRXn5FAjBH10gIqKhi8ViaGhoYECjAQkhUFNTg7a2\ntiGtN+ZCGgCoqh/V1aeguvoUHAMgmezCvn1/QUfna+joeAPbPvr/gY8AXa9CVeVcVFWfguqqUxAM\nTuIfGxERDRq/M2iwDuS9MiZDWjZdr0Bd3edQV/c5AEA8/ik6Ot9AZ8dr6Oh8HXva7FPgAv4jnMB2\nKqqq5sHv55WiREREVBgl2dfn90/A4Yedj6lTf4pTT1mLeXNfxXHH3olwxXS0tb2C9//2Lax9bS7e\n/MsifPjhD9G2dxUMI1LoahMREY2aBQsWuDeDP+ecc7Bv374R2/bSpUvx3HPPjdj2DqbHH38c1113\nXUGeuyRa0vojhEAo1IhQqBH19V+BlCYikb+ho/N1dHa8jp3/+A12tD4OIVSEw012N2rVKRg3bhYU\nxV/o6hMREY24F198sdBVIDCk9SGEioqK6aiomI6GSVfDNOPY3/UOOjteR0fnG/jkk4fQ0vIAFCWA\nysrZqK6ah6qqUxAOT4UQaqGrT0REBfDhhz9EpHvziG4zXD4Fxx57W7/LtLS0YNGiRZg7dy5ef/11\nzJ49G5dffjluv/127NmzB08//TROOOEEfOMb38CmTZuQTCZxxx13YPHixYhGo7j88svx7rvv4vjj\nj0c0GnW3m/qJxdraWpx//vnYsWMHYrEYbrjhBlx11VUAgPLyctxwww3405/+hGAwiD/+8Y+YMCH/\nrzeuWbMGP/vZz7B7927cc889uPDCCyGlxI033oiXXnoJQgjceuutuOSSS7B69Wrce++9+NOf/gQA\nuO6669Dc3IylS5fipptuwooVK6BpGs466yzce++9aGtrwzXXXIPt27cDAH7xi1/g1FNP7VMHy7Jw\n9NFHY8OGDaisrAQATJ48GWvXrsVbb72FH/3oR0gkEqipqcHTTz/dZ3+WLl2Kc889FxdeeKH7GnR3\ndwMAfvrTn+J3v/sd4vE4LrjgAtx55539/t8NBkPaAFTVj+qqeaiumodjABhGBJ2df7Fb2jpfx7aP\n7gEAaFolAoHDIYQKIXQoQrPHFd0p0yCE5pRrEIqWVeZdVoeSWsezvruus37mtA5V8UNxH74+4wyR\nRERjz7Zt2/Dss89i2bJlmD17NpYvX461a9dixYoV+PGPf4ypU6di4cKFWLZsGfbt24c5c+bgs5/9\nLB5++GGEQiFs3rwZGzduxIknnphz+8uWLUN1dTWi0Shmz56NL37xi6ipqUFPTw/mzp2Lu+66Czfe\neCMeffRR3HrrrXnruWvXLqxduxYffPABzjvvPFx44YX4/e9/jw0bNuDdd9/F3r17MXv2bMyfPz/v\nNtrb2/HCCy/ggw8+gBDC7ZK94YYb8K1vfQunnXYatm/fjrPPPhubN/cNzYqiYPHixXjhhRdw+eWX\n4y9/+QsmTZqECRMm4LTTTsObb74JIQT+8z//E/fccw/+/d//fVD/BytXrsTWrVvx1ltvQUqJ8847\nD2vWrOl3XwaDIW2INC2MurrPoq7uswCAeHwPOjvfQGfnm0gkOyClASlNSCsJKU2YRtwpSz8syztt\nQsqkU2aP279nP/KE0LICXPYwa1z4oKj+zGnFb5eJ9LpCKJCQQJ977km7HHDmyRzlyFOeoyyrHAAC\ngSMRrpgOv692hF4lIqKhG6jFazQ1NjZi+vTpAIATTjgBZ555JoQQmD59OlpaWtDa2ooVK1bg3nvv\nBWDfOmT79u1Ys2YNrr/+egBAU1MTmpqacm7/vvvuwwsvvAAA2LFjB7Zu3Yqamhr4fD6ce+65AICT\nTjoJr7zySr/1PP/886EoCqZOnYpPP/0UALB27Vp86UtfgqqqmDBhAs444wy8/fbbqKioyLmNcePG\nIRAI4Ktf/SrOPfdc9/lfffVV/O1vf3OX6+rqQnd3N8rL+97Q/pJLLsEPfvADXH755fjtb3+LSy65\nBADQ2tqKSy65BLt27UIikehzP7P+rFy5EitXrsSsWbMAAN3d3di6dStDWqH5/eNx2GGLcdhhi0ds\nm1JafYKbPfSGvHSZJZOQVhKWFYdlJZxhHKYVh3SmTSsB6czPLLeXlU65YXS745b7SMCyEpAyMWL7\nONL8/sMQDk9DRdjuqg6Hp8Hnqyl0tYiIRp3fnz4/WlEUd1pRFBiGAVVV8fzzz+O4444b8rZXr16N\nV199FW+88QZCoRAWLFjg/sKCruvubSVUVYVhGIOu50A30tc0DZZludOp59Q0DW+99RZWrVqF5557\nDr/61a/wP//zP7AsC2+++SYCgcCA+zRv3jxs27YNbW1t+MMf/uC2/n3jG9/At7/9bZx33nlYvXo1\n7rjjjn7rZVkWEomEuz8333wzrr766gGffygY0oqQEAqE8BfdhQlSWrDcMJh+pFvChPPIvh+McIfp\ncpGn3LO8Uyaylk2VQ0pEo5+gK/IeIl3voSvyHvbufdXdSiBwJMLh6agIT0e4YhoqwtOg65XDexGI\niA4xZ599Nu6//37cf//9EELgr3/9K2bNmoX58+dj+fLlWLhwITZt2oSNGzf2WXf//v2oqqpCKBTC\nBx98gDfffHNE63b66afj4YcfxpIlS9DR0YE1a9bgpz/9KZLJJP72t78hHo8jGo1i1apVOO2009Dd\n3Y3e3l6cc845OPXUU3H00UcDAM466yzcf//9+O53vwsA2LBhA2bOnJnzOYUQuOCCC/Dtb38bU6ZM\nQU1NjbuvRx55JADgiSeeyLluQ0MD1q9fj4svvhgrVqxAMpkEYL/Gt912Gy699FKUl5dj586d0HUd\n48ePH9brw5BGgyaEAlX1Q1WLJzz6/XWorEz/moZhRBCJvO8Et03oiryHtrb/ducHAxOdwDYd4Yrp\nqAhPg6aFC1F1IqKD4rbbbsM3v/lNNDU1wbIsNDY24k9/+hO+9rWv4fLLL8eUKVMwZcoUnHTSSX3W\nXbRoER566CFMmTIFxx13HObOnTuidbvgggvwxhtvYMaMGRBC4J577sFhhx0GALj44osxbdo0NDY2\nut2IkUgEixcvRiwWg5QSP/vZzwDYXbJf//rX0dTUBMMwMH/+fDz00EN5n/eSSy7B7Nmz8fjjj7tl\nd9xxBy666CJUVVVh4cKF+Pjjj/usd+WVV2Lx4sWYMWMGFi1ahLKyMgB2SNy8eTPmzZsHwL6g4Ne/\n/vWwQ9qY++3O5uZmmbrPCxEAJJP7EYlsQldkk9Pitgmx2A53fjDYYF/RG56OcHg6wuGp0LS+5zEc\nLJZlIJnsRDLZgUSi3R4mO5BMOMNkJ3RtHEJlx6CsbDLKQsfA7z+Mdz4nOsg2b96MKVOmFLoadAjJ\n9Z4pqd/uJMqm6+NQXX0qqqvTl2Mnk53o6tqESMTuJt23bx0+/fR/O3MFQqFjUBGelm51C0+FqoYO\n6PktK4FkshOJRLsnbLV7QlcHEon00DDy3UBSQNcroeuVznL73TmqWo6ysmNQFjoGobLPoKzsMygL\nHYNg8Che1XuIMs04TDMCw+iGqpXDp1fzt4aJSgxDGpUkXa9CTc3pqKk53S1LJPZmtLZ1dr6B3Z/+\nwZmroKzsMxnntwnFlw5aGQHMM53s6OfXKhToehV8vmroejXKy4+HrlfDp1dD92UOfb4aaFolFMX+\nk5VSIpFsR0/PVvT2fISe3m3o6dmG9o612LX79+lnUHwIhY5GKHSMHdyc8BYKNRTdOY9jhZQmDKMH\nptkNw4hkPsxumIYdvAwzVW4vl16+276AJ+tCHSF88PsnIOA/DP7A4fbQfxgCgcPh9x8Gf+AIBjkq\nuLvuugvPPvtsRtlFF12EW2655aDX5bHHHsMvf/nLjLJTTz0VDzzwwEGvy4FidydRP+LxPXZXqXNh\nQlfXRiST7TmXFUKzQ5YTujLDVo099MzX9cpR+UJNJrvQ2/sRenq2OeHNHo/FWpG6yEMIFcHgxHR4\nC30GZWXHIBQ6BppWNuJ1OtRIaSGZ3IdEog3x+B4kEm1IGvthGKmQZQeuVKjyBjLT7BnEMyjQtLDz\nKIemhqFq5RnTmuaUqeUwzG7EY7sQj+9GLL4L8dhuxOK7cwQ53Qlyh8MfcEKcMx7wHw6//3D4fDUM\nciNk8+bNOP7443mqAQ2KlBIffPABuzuJRorfPx5+/0LU1i4EYP+RxeO7EYm8D8ByQlcNdL0amlZR\nFB/Wul6BceNmYdy4WRnlphlFb+/HfcJbe/tqSJm+dN7vPzyj1a2sbDLKyo6Brlcd7F0ZcZYVRyLR\n7gSvPa7lswQAAA6ESURBVIgn9iIR34N4oi0jkCUSezNeEy9FCfYJWH7/hHSZmg5basa0s7wWhqIE\nh/1ekVIimWxHLL4b8dgud2gHud3o2v8uYvGX8wY5O8B5W+UOd1vlfL5aBrlBCAQCaG9vR01NTVH8\n7VPxklKivb19ULcI8WJLGlGJs6wkotHtbnhLd59+BMuKucvpejXKyj4Dn68WqhKEqoagqAGoagiq\nEsiaDkJVg1DUoDuuqkEozvhIBgApJQwjYoesxB4k4m2e8b32MNGGeLwtz/l+ArpeDb9/PHy+Wvh9\n4+Hz18Hvq4PPPx4+Xx38vlroehVUtdztcj4UZAY5pxXOG+qcacvKDnKaG+R8vjr49CroelW6ZTg1\n7bQMq2qwQHtYWMlkEq2tre49vIj6EwgEUF9fD13XM8r7a0ljSCOinKS0EIv9wz3fLRXeksn9MM1e\nWFbMGcaHvG1F8duhzgl3qhqAquQJeWrQmeeHafS4rV52C9heJBJ7ctZBUXzw+cY7YasuY9zvcwKZ\nfzx0veaQCl4jzQ5yHW43amaX6i73CuNkch8AK+c2FCVgn1/pdPGnQpzPCXJ2uEsHO12vhKLoObdF\nVGrY3UlEQyaEgmCwHsFgPWprFuRdTkoLphmFZUVhms7DisLyjJtmLyzTDnWmE+5M01nGXa8XhtGF\neHw3TDOWEQS9P5WmaZXw++vg89WhctyJntBVl24B842HpoXZBTUIQgj4fDX2L3SEp+VdTkoLhtHl\nXols3yamE4lkJ5KJ9vR4shPR6CdIJDpgmt15t6dpFRmtcbmCna6Nc7qJK6BpFVDVEP9PqaQwpBHR\nsAihOBcbjM4FB1JK56fJep3WN16VWghCKO4tYICjB7WOffuZfe4taDKCnXM1dDLZiVhsFyKR95FM\ndvTpes2sg+oEtnBGeNO0CuhueUXmPD09T1XLeK4dHVIY0oioqAkhiu6XLmhwFMXnXHwzuLuuSylh\nmr3uzZyTRhcMowtG0hkaXc4tSrrceb29f3eurO1yWl37rVFWwAs7Ac4Oc94AaN/6ptZ51PDggAqC\nIY2IiIqCEAKaVgZNK0MwWD/k9S0rCdPsRjIj1EUyQl1q2jAiMJJdiEa3O/MiA3TPhu3AptdmhLf0\nePpRqhdS0MhjSCMiojFBUXQoStUB3y7GvhFxNwxjPxKJDiQSe9OP5F77V0MSe9HdswWJztdgGF05\nt6OqZX0DXJ5wZ3fB8jw7yo0hjYiICPY5b7o+Dro+DsHgxAGXT913LxXe3GEyHe56ez/Gvn3rkEx2\nwnsBTIqiBDIDnV4DXa90bmRc5gyd++6pZc7995x5Y/AcO/uOExakND3jljOUAExIaUFCAtKChGUP\nPfMA6SyTmmd5tiMzpvvOM5317PHU80qYnm31Xc4dhwVIM10/73jqedy6OfP6wZBGRER0ABTFj0Dg\nCAQCRwy4rGUZzu/z7s3xsMNdLLYTXV3vwjC6+r2AwktVyzMCnKaWZwW81PzyzICXNU9R/BktelJa\nsKy4c4V1zB5acbvMnY7BMuOe8dQyqfGYMx73jHu2427bHs93A+mxSTgBu/+QzZBGREQ0yhRFG9JF\nFJaVgGn2uL/lao+nfv+1G4bZ4wwz55tGN+KJtox5+e5v5yWEBlUtAyDtMDXIkJh7W7pzL8QAFMV+\nqIofiuqHogah61VQ1IC9jBJwxgNQhAYIBQLCGSp2kHHGM+epgBDpZaDYIVOozrLCs072djLn2dOq\ns4xnHAJCqH2e1w6zCoTIvZxdlr1catxT1/Qrlve1ZEgjIiIqMorig6L4hv1zbPYtbGKZvzGbCnhO\nkDONHjf8QQg7ODnhSVX8TtDyO9OBvgHMCVypcSHUEXoViCGNiIhojLJvYRN0rjitK3R1aIjG1hmH\nRERERGMEQxoRERFREWJIIyIiIipCDGlERERERYghjYiIiKgIMaQRERERFaGiD2lCiEVCiC1C/N/2\n7jXWjqoM4/j/aQtCpQZQKpWLEClIoQrhIhCRSEEsipVLKSAgJohcDDFRK6JGQKgQCsqlRkpBo0LQ\noIhGqgQVBEFqIeEilrYK0iJqiwJCKaWcxw9rFTeH03qOnNlrz8z7+3L2njl7530za2a/s9aaGS2W\ndEbpeEIIIYQQuqGnizSlO+LNAiYDE4CjJU0oG1UIIYQQQvV6ukgD9gQW2/6z7VXAdcCUwjGFEEII\nIVSu14u0LYAlHe+X5mUhhBBCCI3W60XaoEg6SdJ8SfOXLVtWOpwQQgghhNes15/d+TiwVcf7LfOy\nV7A9G5gNIOnfkh7uTng95U3A8tJBFBB5t0vk3S6Rd7u0Ne8d1rai14u03wPjJW1LKs6OAo75H595\n2PbulUfWYyTNj7zbI/Jul8i7XSLvdpE0f23rerpIs71a0ieBXwAjgatt/6FwWCGEEEIIlevpIg3A\n9k3ATaXjCCGEEELopkZcONDP7NIBFBJ5t0vk3S6Rd7tE3u2y1rxlu5uBhBBCCCGEQWhiT1oIIYQQ\nQu3VskiT1PNz6aqQH5PVOpLeUDqGEiSNkzSudBzdJun1pWPoNkkqHUMJbc07hMGqVZEmaZSkmcBF\nkg4oHU+3SBopaQYwQ9KBpePpJkmnAbdJ2i2/b/xBXdKIvL3vBiZKWr90TN2Q9+8ZwA2SPi7praVj\n6qIN17xoQxvv8HLbblPekrbMf1uTM4CkKZLGl46j2yRtLmlEfj2kbV6bIi0ndikwDpgHfE7SaZJe\nVzayaknaD7gH2ARYBJwnaZ+yUVWvoyGPAVYAJwG4HZMojwPeDky0fXN+bm2jSdoEuBbYGPgacCjr\nuMFjU0iaJOkOYJakY6EdbVzS+yTNBS6TdBy0Ju/1JX0X+BW0I2cASbtKug84lo7CvOny/n07MAv4\nBgx9m9emSCP9WO8CnGz7GmAmsD0wtWhU1esDLrJ9iu05wF3AhwrHVDnbzmcebwa+SarbPgLNHvbN\nxel44FLbT0vaXVIbetM2AraxfartucDfSgdUNUmbAucCXwe+Axwh6Ut5XZ2OzYOiZJSk6cAM4HLg\nVmCypClFg6tQv56TF4H1gDGSjh9gfVNNIx3TprblXqeStie180uAU4CtJe0/1O+pzdwu289IehQ4\nAbgM+C2pV20fSbfYbupB/R5gnqSRtl8CfgfsWjimykkaYbtP0nLgOeDXwCH5rOQZ4KmiAVYkF6eb\nAYdKmggcDzwCLJd0oe1HykZYDdtLJK2Q9G3S49+2Ad4oaWfg2qbs32uKL9t9wFuAB4AbbL8kaSlw\nt6Q5tp+QpKb0tHTkvVrSEuBo24skbUQ6njXyJKSj2HY+0VpNOoZfT5q+cqPtp4sFWJHOdp5PqseS\nckbSycC9wIO2VzS0nfeROpXm2b4+z6t+DlgoaT3bLw4277qdrd0A7CJpnO1nSQe4F0jFWiPZXmH7\nhVygARwEPFYypm7IjRxgIumJEz8HJpCK850bfvZ5ObA7sJPtPYDpwJPAyUWjqt5U4E7gr7a3Ay4G\nNgcOKxrVMJH0MWAp8JW86Flgb9LzCrG9CLiGtP0boyPv8/KiHwN/yj9Wz5KK1TGl4qtKR97nAHRM\nWziEdIP224HpkvYtE2E1OvI+Oy8aQ+oQ2krSj0ht/rOk6Q2NGfLtyPvcvOh+YDdJV5JqlbHA+cDV\nQ/neuhVpd5AevnoCgO17gD3omHTbVPnigTXDf3Pzsp3U/Ctd7yON5d9K6kFbADzUlB17LRYBC4E9\nAWw/CvyFVKg1lu1lwCryA5Zt35ZXvVAsqGGSe4ymABeQhvd2yNv1XtJw5xpfALaUNL4Jbbxf3gdJ\n2s7287b7cm/C+qTj97x+n6v1SVi/vA+WtF1eNQa43fYK4Bbg08AVkkbXPWd4Vd4fkLS97adIowFn\nAnfZ/ihwNLCjpEn5c7XOvV/e78/794K8bCFwvu39gBPz+r0Hu3/Xqkiz/QRwI+kgN1XSNsBKUhdy\n0/WR5jIsB94h6afAZ2h+gTqCdAZyuu33kH7UTiwbUrVsrwTOAEZKOlzSjqSD2jNlI+uKxaQiZS9J\nY4F3Ac8Xjuk1yz1Gp9u+BLiZ//amnQpMkrR3fv8c6cRkZfejHH4D5H1Ov3/ZGBht+0FJW0g6In+u\n1gXqOrb3KtLcw1+S9vG5pJPOFXXPGda5vb8KvARsIGm07dXAT4Ct8udqnfsAeZ+VVz1JugDqwfx/\nK4HvA5sO9rtr+cQBSZNJQyP7AJfbbtTwwNpI2os0HHQn8C3bVxUOqXKSNrT9fH4tYKztvxcOqysk\nvRvYH/ggcKXtKwuHVDlJG5Am2R5CKs4vtd2oR8VI2pz0A3W27Z8p3WbmYNKcna2BycBk2/8qGOaw\n68j7i7Zvzsv2Il3Nex1phGSO7VnFgqxAR95ftj1X0jnAKNtn5vV/BA63/VDJOIdbR95n2b5J0jTg\nAOAhYDRwDHCY7YcLhjnsBtjenyfNLf4wcDhwJHDoYOcX17JIA5C0HqkAb0MvGvDyvXWOAy62Xfsh\noKGQNKpN27pTx0UjrSFpW2Cp7RdLx1IFSZ8AjrW9b34/GXgvsAVwhu0lJeOrSs77mDz0g6RPARcC\nVwHntSXvfutG5+HPxhmgnb8TmAS8DbjAdiPnVw+Q90zS3PkRwPShtPPaFmkhhFBHHVcuX0+61Ugf\nMAd4oO7DPusyQN7/JE20XmD7N2Wjq05H3j8EHgcEfM/23YVDq1S/7f0EKe8rbD9QOLRK9cv7H6T7\nfP6AtH8PeepGreakhRBC3eUD+GjScO40YLHt+5tcoMGr8j4KeNL27CYXaPCKvDcjzS1d1PQCDQbc\n3gubXqDBq/I+EnjM9rz/p0CDGt0nLYQQGuRU0kUwB7Zs6kLkHXm3wbDlHcOdIYTQZWuGRErH0W2R\nd7tE3sPwXVGkhRBCCCH0npiTFkIIIYTQg6JICyGEEELoQVGkhRBCCCH0oCjSQgghhBB6UBRpIYQQ\nQgg9KIq0EEIIIYQeFEVaCCGEEEIP+g8+2U9hun6oMgAAAABJRU5ErkJggg==\n",
            "text/plain": [
              "<Figure size 720x720 with 9 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "aXVP7aiPf4MC",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "from sklearn import preprocessing\n",
        "std_scale = preprocessing.StandardScaler().fit(dataset)\n",
        "dataset = std_scale.transform(dataset)\n",
        "dataset = pd.DataFrame(dataset)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Qw0ljBW1RbDf",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "y = dataset[8]\n",
        "x = dataset.loc[:,0:7]"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "qy1nNyWLK4HA",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3, random_state=2003, shuffle = True)\n",
        "x_train_np = x_train.to_numpy()\n",
        "y_train_np = y_train.to_numpy()\n",
        "\n",
        "x_test_np = x_test.to_numpy()\n",
        "y_test_np = y_test.to_numpy()"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "-LJns3R-8lmb",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "import torch\n",
        "from torch.nn import Conv1d\n",
        "from torch.nn import MaxPool1d\n",
        "from torch.nn import Flatten\n",
        "from torch.nn import Linear\n",
        "from torch.nn.functional import relu \n",
        "from torch.utils.data import DataLoader, TensorDataset"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "IRz40PeaCvLX",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "class CnnRegressor(torch.nn.Module):\n",
        "  def __init__(self, batch_size, inputs, outputs):\n",
        "    super(CnnRegressor, self).__init__()\n",
        "    self.batch_size = batch_size\n",
        "    self.inputs = inputs\n",
        "    self.outputs = outputs\n",
        "    self.input_layer = Conv1d(inputs, batch_size, 1)\n",
        "    self.max_pooling_layer= MaxPool1d(1)\n",
        "    #adding 2 layers\n",
        "    #using 512 neurons\n",
        "    self.conv_layer = Conv1d(batch_size, 512, 1)\n",
        "    self.conv_layer1 = Conv1d(512, 512, 1)\n",
        "    self.flatten_layer = Flatten()\n",
        "    self.linear_layer = Linear(512,64)\n",
        "    self.outputs_layer = Linear(64, outputs)\n",
        "  def feed(self, input):\n",
        "    input = input.reshape((self.batch_size, self.inputs, 1))\n",
        "    output = relu(self.input_layer(input))\n",
        "    output = self.max_pooling_layer(output)\n",
        "    output = relu(self.conv_layer(output))\n",
        "\n",
        "    output = relu(self.conv_layer1(output))\n",
        "\n",
        "    output = self.flatten_layer(output)\n",
        "    output = self.linear_layer(output)\n",
        "    output = self.outputs_layer(output)\n",
        "    return output"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "w89fMLroKG_T",
        "colab_type": "code",
        "outputId": "9a317aab-adc1-434a-c6ed-4e96f2322960",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 143
        }
      },
      "source": [
        "from torch.optim import Adamax \n",
        "from torch.nn import L1Loss\n",
        "!pip install pytorch-ignite\n",
        "from ignite.contrib.metrics.regression.r2_score import R2Score"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Collecting pytorch-ignite\n",
            "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/35/55/41e8a995876fd2ade29bdba0c3efefa38e7d605cb353c70f3173c04928b5/pytorch_ignite-0.3.0-py2.py3-none-any.whl (103kB)\n",
            "\r\u001b[K     |███▏                            | 10kB 33.3MB/s eta 0:00:01\r\u001b[K     |██████▎                         | 20kB 6.1MB/s eta 0:00:01\r\u001b[K     |█████████▌                      | 30kB 8.7MB/s eta 0:00:01\r\u001b[K     |████████████▋                   | 40kB 5.6MB/s eta 0:00:01\r\u001b[K     |███████████████▉                | 51kB 6.8MB/s eta 0:00:01\r\u001b[K     |███████████████████             | 61kB 8.1MB/s eta 0:00:01\r\u001b[K     |██████████████████████▏         | 71kB 9.3MB/s eta 0:00:01\r\u001b[K     |█████████████████████████▎      | 81kB 10.5MB/s eta 0:00:01\r\u001b[K     |████████████████████████████▍   | 92kB 11.6MB/s eta 0:00:01\r\u001b[K     |███████████████████████████████▋| 102kB 9.4MB/s eta 0:00:01\r\u001b[K     |████████████████████████████████| 112kB 9.4MB/s \n",
            "\u001b[?25hRequirement already satisfied: torch in /usr/local/lib/python3.6/dist-packages (from pytorch-ignite) (1.4.0)\n",
            "Installing collected packages: pytorch-ignite\n",
            "Successfully installed pytorch-ignite-0.3.0\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "wgBKsp3QO83k",
        "colab_type": "code",
        "outputId": "6c5c3c6c-123a-4044-e580-5a6270052bdd",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 176
        }
      },
      "source": [
        "batch_size = 64\n",
        "model = CnnRegressor(batch_size, x.shape[1],1)\n",
        "model.cuda()"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "CnnRegressor(\n",
              "  (input_layer): Conv1d(8, 64, kernel_size=(1,), stride=(1,))\n",
              "  (max_pooling_layer): MaxPool1d(kernel_size=1, stride=1, padding=0, dilation=1, ceil_mode=False)\n",
              "  (conv_layer): Conv1d(64, 512, kernel_size=(1,), stride=(1,))\n",
              "  (conv_layer1): Conv1d(512, 512, kernel_size=(1,), stride=(1,))\n",
              "  (flatten_layer): Flatten()\n",
              "  (linear_layer): Linear(in_features=512, out_features=64, bias=True)\n",
              "  (outputs_layer): Linear(in_features=64, out_features=1, bias=True)\n",
              ")"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 12
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "8RFo0olyO9ca",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "def model_loss(model,dataset, train = False, optimizer = None):\n",
        "  performance = L1Loss()\n",
        "  score_metric = R2Score()\n",
        "\n",
        "  avg_loss = 0\n",
        "  avg_score = 0\n",
        "  count = 0\n",
        "\n",
        "  for input, output in iter(dataset):\n",
        "    predictions = model.feed(input)\n",
        "    loss = performance(predictions, output)\n",
        "    score_metric.update([predictions,output])\n",
        "    score = score_metric.compute()\n",
        "\n",
        "    if(train):\n",
        "      optimizer.zero_grad()\n",
        "      loss.backward()\n",
        "      optimizer.step()\n",
        "    avg_loss += loss.item()\n",
        "    avg_score += score\n",
        "    count += 1 \n",
        "  return avg_loss / count, avg_score / count"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "unP5t8n9O_ul",
        "colab_type": "code",
        "outputId": "2d2a1dca-6f9a-471f-c5f9-a2bf3d39a471",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        }
      },
      "source": [
        "import time\n",
        "epochs = 50\n",
        "print('Trainable parameters are:' + str(model.parameters()))\n",
        "optimizer = Adamax(model.parameters(), lr = .001)\n",
        "inputs = torch.from_numpy(x_train_np).cuda().float()\n",
        "outputs = torch.from_numpy(y_train_np.reshape(y_train_np.shape[0],1)).cuda().float()\n",
        "tensor = TensorDataset(inputs, outputs)\n",
        "loader = DataLoader(tensor, batch_size, shuffle= True, drop_last=True)\n",
        "\n",
        "r2plot = []\n",
        "training_startingTime = time.time()\n",
        "for epoch in range(epochs):\n",
        "  avg_loss, avg_r2_score = model_loss(model, loader, train=True, optimizer=optimizer)\n",
        "  #r = [avg_r2_score,epoch]\n",
        "  r2plot.append(avg_loss)\n",
        "  print(\"Epoch\" + str(epoch + 1) + \":\\n\\tLoss = \" + str(avg_loss)+ \"\\n\\tR^2 Score = \" + str(avg_r2_score))\n",
        "training_endTime = time.time() - training_startingTime\n",
        "print(training_endTime)\n",
        "\n",
        "\n"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Trainable parameters are:<generator object Module.parameters at 0x7f5e7d5baaf0>\n",
            "Epoch1:\n",
            "\tLoss = 0.4243165170397994\n",
            "\tR^2 Score = 0.48659172717962973\n",
            "Epoch2:\n",
            "\tLoss = 0.36125346537128156\n",
            "\tR^2 Score = 0.7073790330900199\n",
            "Epoch3:\n",
            "\tLoss = 0.3427049630559613\n",
            "\tR^2 Score = 0.7508956125981976\n",
            "Epoch4:\n",
            "\tLoss = 0.33231173809868336\n",
            "\tR^2 Score = 0.7506926898128401\n",
            "Epoch5:\n",
            "\tLoss = 0.32715120383709534\n",
            "\tR^2 Score = 0.7642069831371867\n",
            "Epoch6:\n",
            "\tLoss = 0.3195524978129853\n",
            "\tR^2 Score = 0.7649379971711302\n",
            "Epoch7:\n",
            "\tLoss = 0.3139487561089041\n",
            "\tR^2 Score = 0.7699714105808455\n",
            "Epoch8:\n",
            "\tLoss = 0.31159559400092324\n",
            "\tR^2 Score = 0.7747977668607146\n",
            "Epoch9:\n",
            "\tLoss = 0.3085250809721883\n",
            "\tR^2 Score = 0.7752455962352344\n",
            "Epoch10:\n",
            "\tLoss = 0.3065504390295311\n",
            "\tR^2 Score = 0.7764636786190726\n",
            "Epoch11:\n",
            "\tLoss = 0.30115093103706037\n",
            "\tR^2 Score = 0.7856546760384728\n",
            "Epoch12:\n",
            "\tLoss = 0.2993365746709798\n",
            "\tR^2 Score = 0.7895348623924306\n",
            "Epoch13:\n",
            "\tLoss = 0.29592806007295447\n",
            "\tR^2 Score = 0.7966771404214373\n",
            "Epoch14:\n",
            "\tLoss = 0.29528731468547087\n",
            "\tR^2 Score = 0.794311969711076\n",
            "Epoch15:\n",
            "\tLoss = 0.2939702766893156\n",
            "\tR^2 Score = 0.7963043559235833\n",
            "Epoch16:\n",
            "\tLoss = 0.29184897932236503\n",
            "\tR^2 Score = 0.7957175531864613\n",
            "Epoch17:\n",
            "\tLoss = 0.2859472216779341\n",
            "\tR^2 Score = 0.7985515047484848\n",
            "Epoch18:\n",
            "\tLoss = 0.28652848924756585\n",
            "\tR^2 Score = 0.8013939730357458\n",
            "Epoch19:\n",
            "\tLoss = 0.2838399403565668\n",
            "\tR^2 Score = 0.7971322156664946\n",
            "Epoch20:\n",
            "\tLoss = 0.2817368067032553\n",
            "\tR^2 Score = 0.8064869090481949\n",
            "Epoch21:\n",
            "\tLoss = 0.2814049458156252\n",
            "\tR^2 Score = 0.8068668008942864\n",
            "Epoch22:\n",
            "\tLoss = 0.2775373907901781\n",
            "\tR^2 Score = 0.8089974162359035\n",
            "Epoch23:\n",
            "\tLoss = 0.275687927889717\n",
            "\tR^2 Score = 0.8192186318972319\n",
            "Epoch24:\n",
            "\tLoss = 0.27704737071499164\n",
            "\tR^2 Score = 0.8158804032749983\n",
            "Epoch25:\n",
            "\tLoss = 0.27572201753678344\n",
            "\tR^2 Score = 0.8158161323360594\n",
            "Epoch26:\n",
            "\tLoss = 0.2736380458412684\n",
            "\tR^2 Score = 0.8114409854127654\n",
            "Epoch27:\n",
            "\tLoss = 0.2703985379415777\n",
            "\tR^2 Score = 0.8320982280590721\n",
            "Epoch28:\n",
            "\tLoss = 0.2690140344369572\n",
            "\tR^2 Score = 0.8241428699833914\n",
            "Epoch29:\n",
            "\tLoss = 0.2694944419267466\n",
            "\tR^2 Score = 0.8091684455038091\n",
            "Epoch30:\n",
            "\tLoss = 0.26623059067490923\n",
            "\tR^2 Score = 0.8173604924409136\n",
            "Epoch31:\n",
            "\tLoss = 0.2662179481421885\n",
            "\tR^2 Score = 0.8269483025692603\n",
            "Epoch32:\n",
            "\tLoss = 0.2664395094318775\n",
            "\tR^2 Score = 0.8257973422082925\n",
            "Epoch33:\n",
            "\tLoss = 0.26310103503577914\n",
            "\tR^2 Score = 0.8307536048388748\n",
            "Epoch34:\n",
            "\tLoss = 0.2625983873958545\n",
            "\tR^2 Score = 0.8252224845732992\n",
            "Epoch35:\n",
            "\tLoss = 0.2601777030480817\n",
            "\tR^2 Score = 0.8271815946160882\n",
            "Epoch36:\n",
            "\tLoss = 0.258344628217509\n",
            "\tR^2 Score = 0.8378453142627452\n",
            "Epoch37:\n",
            "\tLoss = 0.2586186057783563\n",
            "\tR^2 Score = 0.8233455779732357\n",
            "Epoch38:\n",
            "\tLoss = 0.25682473810798917\n",
            "\tR^2 Score = 0.8322401842359428\n",
            "Epoch39:\n",
            "\tLoss = 0.25499352872906245\n",
            "\tR^2 Score = 0.8396524914112303\n",
            "Epoch40:\n",
            "\tLoss = 0.2512343229199739\n",
            "\tR^2 Score = 0.8350708491521462\n",
            "Epoch41:\n",
            "\tLoss = 0.25272883675290864\n",
            "\tR^2 Score = 0.8356077102244552\n",
            "Epoch42:\n",
            "\tLoss = 0.2500696786315986\n",
            "\tR^2 Score = 0.8285948438852232\n",
            "Epoch43:\n",
            "\tLoss = 0.24852640078206767\n",
            "\tR^2 Score = 0.8387312950658368\n",
            "Epoch44:\n",
            "\tLoss = 0.2478772687805073\n",
            "\tR^2 Score = 0.847301355592353\n",
            "Epoch45:\n",
            "\tLoss = 0.24596791771228002\n",
            "\tR^2 Score = 0.8395103952596513\n",
            "Epoch46:\n",
            "\tLoss = 0.2479957281340398\n",
            "\tR^2 Score = 0.837864893244548\n",
            "Epoch47:\n",
            "\tLoss = 0.2442033908292317\n",
            "\tR^2 Score = 0.8404486195103554\n",
            "Epoch48:\n",
            "\tLoss = 0.24170251959107916\n",
            "\tR^2 Score = 0.8444048802733359\n",
            "Epoch49:\n",
            "\tLoss = 0.24168434685655774\n",
            "\tR^2 Score = 0.8457845548570296\n",
            "Epoch50:\n",
            "\tLoss = 0.2418658493479271\n",
            "\tR^2 Score = 0.8475298394314233\n",
            "56.68751764297485\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "pXZuzos5U4VB",
        "colab_type": "code",
        "outputId": "0a2cd702-cc9e-4f4b-937b-6b96bfce1a32",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 232
        }
      },
      "source": [
        "torch.save(model.state_dict, '1111075_1dconv_reg')\n",
        "models = torch.load('1111075_1dconv_reg')\n",
        "model.eval()"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "/usr/local/lib/python3.6/dist-packages/torch/serialization.py:360: UserWarning: Couldn't retrieve source code for container of type CnnRegressor. It won't be checked for correctness upon loading.\n",
            "  \"type \" + obj.__name__ + \". It won't be checked \"\n"
          ],
          "name": "stderr"
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "CnnRegressor(\n",
              "  (input_layer): Conv1d(8, 64, kernel_size=(1,), stride=(1,))\n",
              "  (max_pooling_layer): MaxPool1d(kernel_size=1, stride=1, padding=0, dilation=1, ceil_mode=False)\n",
              "  (conv_layer): Conv1d(64, 512, kernel_size=(1,), stride=(1,))\n",
              "  (conv_layer1): Conv1d(512, 512, kernel_size=(1,), stride=(1,))\n",
              "  (flatten_layer): Flatten()\n",
              "  (linear_layer): Linear(in_features=512, out_features=64, bias=True)\n",
              "  (outputs_layer): Linear(in_features=64, out_features=1, bias=True)\n",
              ")"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 65
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "8WJEq1pKqH6i",
        "colab_type": "code",
        "outputId": "d8af3e9f-abdd-4bdd-c3a6-2e15d31c256d",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 34
        }
      },
      "source": [
        "def count_parameters(model):\n",
        "    return sum(p.numel() for p in model.parameters() if p.requires_grad)\n",
        "print( \"Trainable parameters : \" + str(count_parameters(model)))"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Trainable parameters : 329409\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "WyU8o5nAZqv8",
        "colab_type": "text"
      },
      "source": [
        "TESTING MODEL"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "B5fvgnnQZbzr",
        "colab_type": "code",
        "outputId": "a25c140a-37d8-46d7-8e64-1969905f00a7",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 70
        }
      },
      "source": [
        "inputs = torch.from_numpy(x_test_np).cuda().float()\n",
        "outputs = torch.from_numpy(y_test_np.reshape(y_test_np.shape[0],1)).cuda().float()\n",
        "\n",
        "tensor = TensorDataset(inputs, outputs)\n",
        "loader = DataLoader(tensor,batch_size,shuffle=True, drop_last=True)\n",
        "testing_startingTime = time.time()\n",
        "\n",
        "avg_loss, avg_r2_score = model_loss(model, loader)\n",
        "\n",
        "print(\"The model's L1 loss is \" + str(avg_loss)+ \"\\n\\tR^2 Score = \" + str(avg_r2_score))\n",
        "testing_endTime = time.time() - testing_startingTime\n",
        "print(testing_endTime)\n"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "The model's L1 loss is 0.2925717962415595\n",
            "\tR^2 Score = 0.8003115520384184\n",
            "0.20942091941833496\n"
          ],
          "name": "stdout"
        }
      ]
    }
  ]
}